|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3.6 Работа с цикламиЦиклы VBA, конструкция For...Next, конструкция For Each...Next, выход из цикла по Exit For, конструкции Do While и Do Until, выход из цикла по Exit Do, конструкция While...Wend Циклы используются в ситуациях, когда нам нужно выполнить какое-либо действие несколько раз. Первая ситуация - мы знаем, сколько раз нужно выполнить какое-либо действие, в этом случае используется конструкция For:Next: For iCounter = 1 to 10 MsgBox "Счетчик: " & iCounter Next Чтобы указать, насколько должно прирастать значение счетчика, используется ключевое слово Step: For iCounter = 1 to 10 Step 2 MsgBox "Счетчик: " & iCounter Next Можно и уменьшать исходное значение счетчика: For iCounter = 10 to 1 Step -2 MsgBox "Счетчик: " & iCounter Next Для безусловного выхода из конструкции For:Next используется команда Exit For. VStop = InputBox ('Введите значение останова') VInput = CInt(VStop) For iCounter = 1 to 10 MsgBox "Счетчик: " & iCounter If iCounter =VInput Then Exit For Next Очень часто в VBA требуется сделать какое-нибудь действие со всеми элементам коллекции или массива - перебрать все открытые документы, все листы Excel, все ячейки в определенном диапазоне и т.п. Для того, чтобы пройти циклом по всем элементам коллекции, используется команда For Each : Next: For Each oWbk in Workbooks MsgBox oWbk.Name Next При использовании этого приема можно очень просто найти и получить ссылку на нужный нам объект: For Each oWbk in Workbooks If oWbk.Name = "Сводка.xls" Then Set oMyWorkBook = oWbk Exit For End If Next В этом случае мы проходим циклом по всем элементам коллекции Workbooks (то есть открытым рабочим книгам в Excel), для каждой книги проверяем ее имя, и если мы нашли книгу с именем Сводка.xls, то мы получаем на нее ссылку и выходим из цикла. Коллекция рабочих книг - это специальная коллекция, которая умеет производить поиск в себе по имени элементов, поэтому в принципе можно было обойтись такой строкой: Set oMyWorkBook = Workbooks("Сводка.xls") Но для многих других коллекций без конструкции For Each не обойтись. Еще одна ситуация - когда мы не знаем точно, сколько раз должна быть выполнена та или другая команда - это зависит от какого-либо условия. Используются конструкции Do While:Loop и Do Until:Loop. Конструкция Do While означает: выполнять какое-либо действие до тех пор, пока условие истинно: Do While MyVar < 10 MyVar = MyVar + 1 MsgBox ' MyVar = ' & MyVar Loop Применений на практике - множество: пройти по всему набору записей, пока они не закончатся, требовать от пользователя ввести подходящее значение, пока не он наконец не введет его и т.п. Внимание! Если вы случайно запустили в своей программе бесконечный цикл, нажмите на клавиши <Ctrl>+<Break>. Откроется окно, аналогичное представленному на рис. 3.1, в котором вы сможете продолжить выполнение, завершить его или открыть ваш код в отладчике.
Рис. 3.1 Выполнение макроса остановлено по <Ctrl>+<Break> Второй вариант - Do Until. Все выглядит точно так же, за одним исключением: цикл будет выполняться до тех пор, пока условие ложно. Do Until MyVar >= 10 MyVar = MyVar + 1 MsgBox ' MyVar = ' & MyVar Loop Можно переписать цикл так, чтобы условие проверялось после завершения цикла: Do MyVar = MyVar + 1 WScript.Echo 'MyVar = ' & MyVar Loop While MyVar < 10 В этом случае цикл будет выполнен по крайней мере один раз. Немедленный выход из цикла можно произвести по команде Exit Do. В VBA имеется также конструкция While : Wend. Это - еще один вариант цикла, который оставлен для обратной совместимости с первыми версиями Visual Basic. Функциональные возможности - те же, что и у конструкции Do:While: While My Var < 10 MyVar = MyVar + 1 WScript.Echo 'MyVar = ' & MyVar Wend
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить этот учебник в формате PDF (Acrobat Reader) или DOC (Microsoft Word) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||